package com.emerquim.bean.support;

import javax.el.ELException;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

import org.apache.log4j.Logger;

import com.emerquim.bean.model.Evento;

/**
 * Clase para manejar los resultados de los reportantes
 * @author Felipe Criales
 */
public class Reportante {
	
	/**
	 * Funcionalidad de log
	 */
	private static final Logger log = Logger.getLogger(Reportante.class);
	
	// ------------------------------------------------
	// Atributos
	// ------------------------------------------------
	
	/**
	 * Nombre del reportante
	 */
	private String nombre;
	
	/**
	 * Telefono del reportante
	 */
	private String telefono;
	
	/**
	 * Fax del reportante
	 */
	private String fax;
	
	/**
	 * Email del reportante
	 */
	private String correo;
	
	/**
	 * La direccion del reportante
	 */
	private String direccion;
	
	/**
	 * El tipo de reportante
	 */
	private long tipoReportante;

	// ---------------------------------------------
	// Metodos
	// ---------------------------------------------

	/**
	 * Contructor de la clase con parametros
	 * @param nombre
	 * @param telefono
	 * @param fax
	 * @param correo
	 * @param direccion
	 */
	public Reportante(String nombre, String telefono, String fax,
			String correo, String direccion,  long tipoReportante) {
		this.nombre = nombre;
		this.telefono = telefono;
		this.fax = fax;
		this.correo = correo;
		this.direccion = direccion;
		this.tipoReportante = tipoReportante;
	}

	/**
	 * Contructor de la clase sin parametros
	 */
	public Reportante() {
		this.inicializarDatos();
	}
	
	/**
	 * Metodo para inicializar los datos con vacios
	 */
	public void inicializarDatos(){
		this.nombre = "";
		this.telefono = "";
		this.fax = "";
		this.correo = "";
		this.direccion = "";
		this.tipoReportante = 1; // Particular
	}
	
	/**
	 * Cargar resultados del reportante en el evento
	 * @param event
	 */
	public void cargarResultadosReportante(ActionEvent event) {
		
		try {
			FacesContext context = FacesContext.getCurrentInstance();
			Evento evento = (Evento) context.getApplication().evaluateExpressionGet(context, "#{evento}", Evento.class);
			if(evento != null){
				// 1. Cargar todos los datos del reportante en el evento
				evento.setNombreReportante(this.nombre);
				evento.setTelefonos(this.telefono);
				evento.setDireccion(this.direccion);
				evento.setFax(this.fax);
				evento.setEmail(this.correo);
				evento.setTipoReportante(this.tipoReportante);
				
				// 2. Borrar los datos de busque dal popup y cerra el modal
				PanelPopUpReportante popup = (PanelPopUpReportante) context.getApplication().evaluateExpressionGet(context, "#{panelPopUpReportante}", PanelPopUpReportante.class);
				if(popup != null){
					popup.inicializarDatos();
				}
			}
		} catch (ELException e) {
			log.error("Error al cargar los datos de un reportante en el evento", e);
		}
	}

	/**
	 * @return the nombre
	 */
	public String getNombre() {
		return nombre;
	}

	/**
	 * @param nombre the nombre to set
	 */
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	/**
	 * @return the telefono
	 */
	public String getTelefono() {
		return telefono;
	}

	/**
	 * @param telefono the telefono to set
	 */
	public void setTelefono(String telefono) {
		this.telefono = telefono;
	}

	/**
	 * @return the fax
	 */
	public String getFax() {
		return fax;
	}

	/**
	 * @param fax the fax to set
	 */
	public void setFax(String fax) {
		this.fax = fax;
	}

	/**
	 * @return the correo
	 */
	public String getCorreo() {
		return correo;
	}

	/**
	 * @param correo the correo to set
	 */
	public void setCorreo(String correo) {
		this.correo = correo;
	}

	/**
	 * @return the direccion
	 */
	public String getDireccion() {
		return direccion;
	}

	/**
	 * @param direccion the direccion to set
	 */
	public void setDireccion(String direccion) {
		this.direccion = direccion;
	}

	/**
	 * @return the tipoReportante
	 */
	public long getTipoReportante() {
		return tipoReportante;
	}

	/**
	 * @param tipoReportante the tipoReportante to set
	 */
	public void setTipoReportante(long tipoReportante) {
		this.tipoReportante = tipoReportante;
	}	
}
